package com.xjm_cloud_admin.service;

import com.xjm_cloud_admin.domain.XjmFile;
import com.xjm_cloud_admin.domain.vo.req.*;
import com.xjm_cloud_admin.domain.vo.resp.FileListRespVo;
import com.xjm_cloud_admin.util.R;
import com.baomidou.mybatisplus.extension.service.IService;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 文件表(XjmFile)表服务接口
 *
 * @author 浪漫写尽歌谱
 * @since 2024-04-24 13:16:57
 */
public interface XjmFileService extends IService<XjmFile> {

    /**
     * 查询文件列表
     *
     * @param vo 查询信息
     * @return 文件列表
     */
    R tree(FileListReqVo vo);

    /**
     * 新建文件夹
     *
     * @param vo 新建文件夹信息
     * @return 新建文件夹结果
     */
    R newFolder(NewFolderReqVo vo);

    /**
     * 上传文件
     *
     * @param vo 上传文件信息
     * @return 上传文件结果
     */
    R uploadFile(UploadFileReqVo vo);

    /**
     * 合并文件
     *
     * @param vo 需要合并的文件信息
     * @return 合并结果
     */
    R merge(MergeFileReqVo vo);

    /**
     * 检查是否有该文件
     *
     * @param vo 文件信息
     * @return 检查结果
     */
    R check(FileCheckReqVo vo);

    /**
     * 上传文件
     *
     * @param vo 上传文件信息
     * @return 上传文件结果
     */
    R upload(UploadReqVo vo);

    /**
     * 预览图片
     *
     * @param id       文件id
     * @param response 响应体
     */
    void previewImage(String id, HttpServletResponse response);

    /**
     * 预览视频
     *
     * @param id       文件id
     * @param fileName 文件名称
     * @param response 响应体
     */
    void previewVideo(String id, String fileName, HttpServletResponse response);


    List<FileListRespVo> sharingTree(String parentId);

    /**
     * 删除文件
     *
     * @param vo 删除文件id
     */
    R delete(DeleteFileReqVo vo);

    /**
     * 获取回收站的文件列表
     */
    R deleteList();

    /**
     * 还原文件
     */
    R restore(DeleteFileReqVo vo);

    /**
     * 搜索文件
     *
     * @param vo 搜索文件信息
     */
    R search(SearchFileReqVo vo);

    /**
     * 下载文件
     *
     * @param response 响应体
     * @param token  请求体
     */
    void download(String token, HttpServletResponse response);

    /**
     * 下载文件
     *
     * @param vo 下载文件信息
     */
    R createdDownload(DownloadFileReqVo vo);

    /**
     * 分享链接创建下载链接
     *
     * @param httpServletRequest 下载文件信息
     */
    R sharingCreatedDownload(HttpServletRequest httpServletRequest, String fileId);
}

